perm filename PACKMS.F4[NEW,LCS]2 blob sn#521800 filedate 1980-07-09 generic text, type T, neo UTF8
00100	C**** PACKMS.F4 -- TO PACK TOGETHER MANY MS PROGRAM FILES *****
00200	C LOAD WITH [NEW,LCS] MSSIO.FAI
00300		DIMENSION NAMES(635),JEXT(200),JREC(235),
00400		1 FIRST(128),SECOND(4000),INP(72)
00500	C JREC(235) HAS 34 WDS FREE FOR MISC. INFO
00600		EQUIVALENCE(JWDS,FIRST(19)),(KREC,JREC(202)),(JEXT,NAMES(201))
00700		1 ,(JREC,NAMES(401))
00800		IREC=1
00900		JREC(1)=6
01000	15	FORMAT(' P(ACK), U(NPACK), D(IRECTORY)?  '$)
01100	18	TYPE 15
01200		ACCEPT 1,JWDS,K,L
01300		IPU=0
01400		MORE=0
01500		IF(JWDS.EQ.'P')GO TO 2
01600		INF=-1
01700		IPU=-1
01800		IF(JWDS.EQ.'D')	IPU=-IPU
01900	C PACK=0,  UNPACK=-1, DIRECTORY=1
02000	16	FORMAT(' TYPE PACK FILE NAME AND EXT.(DEFAULT EXT=.PAK)  '$)
02100	17	TYPE 16
02200		ACCEPT 1,INP
02300		X=' '
02400		CALL NAMEXT(INP,IPAK,X)
02500		IF(INP(1).EQ.' ')IPAK=JPAK
02600		JPAK=IPAK
02700		IF(X.EQ.' ')X='PAK'
02800		IF(LOOKX(IPAK,X).EQ.0)GO TO 17
02900		IF(IPU.GT.0)GO TO 113
03000	1	FORMAT(72A1)
03100	2	IF(IPU.LT.0)GO TO 41
03150		TYPE 3
03175		GO TO 42
03187	41	TYPE 40
03200	3	FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS)  '$)
03220	40	FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS) OR "ALL"  '$)
03300	4	FORMAT(' TYPE LAST NAME OR "ALL" (NO EXT, <CR>=1 FILE ONLY)  '$)
03400	42	ACCEPT 1,INP
03500		KEXT=' '
03600		CALL NAMEXT(INP,NAME,KEXT)
03700		IF(KEXT.EQ.' ')KEXT='MS'
03800		IF(IPU.LT.0.AND.NAME.EQ.'ALL')GO TO 122
03900		IF(IPU.LT.0)GO TO 19
04000		IF(LOOKX(NAME,KEXT).EQ.0)GO TO 2 
04100	19	TYPE 4
04200		ACCEPT 1,INP
04300		NAME2=' '
04400		X2=' '
04500		CALL NAMEXT(INP,NAME2,X2)
04600		IF(NAME2.EQ.' ')NAME2=NAME
04700		IF(X2.EQ.' ')X2=KEXT
04800		IF(X2.NE.KEXT)GO TO 18
04900		IF(IPU.LT.0)GO TO 121
04950		IF(NAME2.EQ.'ALL')NAME2='99999'
05000	12	IF(MORE.LT.0)GO TO 21
05100		TYPE 16
05200		ACCEPT 1,INP
05300		X=' '
05400		CALL NAMEXT(INP,IPAK,X)
05500		IF(X.EQ.' ')X='PAK'
05600	13	IF(LOOKX(IPAK,X).EQ.0)GO TO 10
05700		TYPE 11
05800	11	FORMAT(' WRITE OVER THAT NAME?  '$)
05900		ACCEPT 1,INP
06000		IF(INP(1).NE.'Y')GO TO 12
06100	10	CALL PUTEXT(IPAK,X)
06200		CALL EXTOUT(NAMES,635)
06300	C COME BACK AND FILL UP THE HEADER LATER.
06400	21	NM=NAME
06500		MORE=0
06600	20	NMX=NM
06800		NMZ=NM
07000	6	IF(LOOKX(NM,KEXT).EQ.0)GO TO 1000
07100	C JUMP IF NOT FOUND
07200	7	CALL GETEXT(NM,KEXT)
07300		CALL EXTIN(FIRST,128)
07400		CALL EXTIN(SECOND,JWDS)
07500		CALL EXTOUT(FIRST,128)
07600		CALL EXTOUT(SECOND,JWDS)
07700		TYPE 9,NM,KEXT
07800		NAMES(IREC)=NM
07900		JEXT(IREC)=KEXT
08000		KREC=IREC
08100		IREC=IREC+1
08200		JREC(IREC)=JREC(IREC-1)+2+(JWDS-1)/128
08300	C SAVE FOR USETI
08400		IF(IREC.LT.201)NAMES(IREC)=0
08500	14	IF(NM.EQ.NAME2.OR.IREC.EQ.200)GO TO 2000
08600	C LIMIT OF 200 FILES AT THIS TIME.
08700		NM=NM+2
08800		GO TO 6
08900	1000	NM=NMX+256
08920	C UPDATE 4TH CHAR.  (E.G. AAAAA TO AAABA)
09000		NMX=NM
09100		IF(LOOKX(NM,KEXT).LT.0)GO TO 7
09200		NM=NMZ+32768
09220	C UPDATE 3RD CHAR. (E.G. AAAAA TO AABAA)
09300		NMX=NM
09400		NMZ=NM
09500		IF(LOOKX(NM,KEXT).LT.0)GO TO 7
09600	C NOW ALL DONE.  REBUILD HEADER.
09700	2001	FORMAT(' ADD MORE TO FILE?  '$)
09800	2000	TYPE 2001
09900		ACCEPT 1,K
10000		MORE=-1
10100		IF(K.EQ.'Y')GO TO 2
10200		CALL USTO(1)
10300		CALL EXTOUT(NAMES,635)
10400		CALL FINEXT
10500		TYPE 8,IPAK,X,KREC
10600		CALL EXIT
10700	8	FORMAT(' ***** ALL DONE WRITING ',A5,'.',A3/5XI3,' FILES')
10800	9	FORMAT(1XA5,'.',A3)
11000	122	IPU=4
11200	121	TYPE 111
11300	111	FORMAT(' CHANGE EXTENSION TO -- (<CR>=NO CHANGE)  '$)
11400	112	FORMAT(A3)
11500		ACCEPT 112,NEXT
11600		IF(NEXT.NE.' ')KEXT=NEXT
11700	113	CALL GETEXT(IPAK,X)
11800		CALL EXTIN(NAMES,635)
11900		IF(IPU.LE.0)GO TO 114
12000		GO TO(109,2,118,3000)IPU
12100	118	GO TO 18
12200	115	FORMAT(' TYPE NEW NAME AND EXT.  '$)
12300	119	MEXT=' '
12400		TYPE 115
12500		ACCEPT 1,INP
12600		CALL NAMEXT(INP,NAME2,MEXT)
12700		IF(MEXT.EQ.' ')MEXT=KEXT
12800		NMX=0
12900		DO 116 K=1,200
13000		NN=NAMES(K)
13100		MM=JEXT(K)
13200		IF(NAME.EQ.NN.AND.KEXT.EQ.MM)NMX=K
13300	116	IF(NAME2.EQ.NN.AND.MEXT.EQ.MM)GO TO 117
13400		IF(NMX.NE.0)GO TO 120
13500		TYPE 102
13600		CALL EXIT
13700	120	NAMES(NMX)=NAME2
13800		JEXT(NMX)=MEXT
13900		CALL EXIT
14000	CCCC GO WRITE NEW FORM OF .PAK FILE	GO TO ????
14100	117	TYPE 11
14200		ACCEPT 1,JWDS
14300		IF(JWDS.NE.'Y')GO TO 18
14400	114	NM=NAME
14500		NN=NM
14600	105	DO 101 K=1,200
14700	101	IF(NAMES(K).EQ.NAME)GO TO 108
14800		NAME=NM+256
14900		NM=NAME
15000		DO 107 K=1,200
15100	107	IF(NAMES(K).EQ.NAME)GO TO 108
15200		NAME=NN+32768
15300		NN=NAME
15350		NM=NN
15400		DO 177 K=1,200
15500	177	IF(NAMES(K).EQ.NAME)GO TO 108
15600	106	IF(INF.NE.0)TYPE 102
15700		GO TO 18
15800	102	FORMAT(' FILE NOT FOUND')
16000	108	CALL USTI(JREC(K))
16100		CALL EXTIN(FIRST,128)
16200		CALL EXTIN(SECOND,JWDS)
16300		TYPE 9,NAME,KEXT
16400		INF=0
16500	104	IF(LOOKX(NAME,KEXT).EQ.0)GO TO 103
16600	C IS FILE ALREADY ON DSK?
16700		TYPE 11
16800		ACCEPT 1,K
16900		IF(K.EQ.'Y')GO TO 103
17000		TYPE 3   
17100		ACCEPT 1,INP
17200		CALL NAMEXT(INP,NAME,KEXT)
17300		GO TO 104
17400	103	CALL PUTEXT(NAME,KEXT)
17500		CALL EXTOUT(FIRST,128)
17600		CALL EXTOUT(SECOND,JWDS)
17700		CALL FINEXT
17800		IF(NAME.EQ.NAME2)CALL EXIT
17900		NAME=NAME+2
18000		GO TO 105
18100	3004	FORMAT(3XI3,' FILES'/)
18200	109	TYPE 3004,KREC
18300		 DO 110 K=1,200
18400		IF(NAMES(K).EQ.0)GO TO 18
18500	110	TYPE 9,NAMES(K),JEXT(K)
18600		GO TO 18
18700	3000	DO 3001 K=1,200
18800		NM=NAMES(K)
18900		IF(NM.EQ.0)CALL EXIT
19000		MM=JEXT(K)
19100		IF(NEXT.NE.' ')MM=NEXT
19200		CALL EXTIN(FIRST,128)
19300		CALL EXTIN(SECOND,JWDS)
19400		TYPE 9,NM,MM
19500	3003	IF(LOOKX(NM,MM).EQ.0)GO TO 3002
19600		TYPE 11
19700		ACCEPT 1,L
19800		IF(L.NE.'Y')GO TO 3001
19900	3002	CALL PUTEXT(NM,MM)
20000		CALL EXTOUT(FIRST,128)
20100		CALL EXTOUT(SECOND,JWDS)
20200		CALL FINEXT
20300	3001	CONTINUE
20400		END
20500	
20600		SUBROUTINE NAMEXT(I,NAME,IEXT)
20700	C FINDS NAME.EXT IN A1 STRING
20800		DIMENSION I(1)
20900	
21000		IF(I(1).NE.-1)GO TO 9
21100	C FIRST PASS UP 'G', 'GM', 'RS', ETC.  (=-1)
21200		DO 1 K=1,72
21300	1	IF(I(K).EQ.' ')GO TO 2
21400	C NOW PASS BLANKS
21500	2	J=72
21600		DO 3 J=K+1,72
21700	3	IF(I(J).NE.' ')GO TO 4
21800	C NOW FOUND START OF WORD (UNLESS ALL BLANKS)
21900	4	IF(J.NE.72)GO TO 5
22000		NAME=' '
22100		RETURN
22200	9	J=1
22300	5	DO 6 K=J,72
22400		IF(I(K).EQ.' ')GO TO 7
22500	C JUMP IF NAME ONLY
22600	6	IF(I(K).EQ.'.')GO TO 8
22700	7	CALL PACKX(NAME,I(J))
22800		RETURN
22900	8	CALL RLOOP(I(61),I(J),K-J)
23000		CALL PACKX(NAME,I(61))
23100		CALL PACKX(IEXT,I(K+1))
23200		END
23300	
23400		SUBROUTINE PACKX(NAM,KNM)
23500		DIMENSION KNM(5)
23600		DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
23700		1 , MM/"774000000000/
23800		NAM=0
23900		DO 12 K=5,1,-1
24000		NAM=NAM .OR. (KNM(K) .AND. MM)
24100		IF (K.EQ.1)RETURN
24200	17	IF (NAM.GE.0)GO TO 13
24300		NAM = (( NAM .AND. LL)/KK) .OR. JJ
24400		GO TO 12
24500	13	NAM = NAM / KK
24600	12	CONTINUE
24700		RETURN
24800		END